i = 5

def f(arg=i):
    print(arg)

i = 6
f()
f(i)

# 默认参数的值是在函数定义时（def 语句执行时）被确定和绑定的，而不是在函数调用时。



def f(a, L=[]):
    L.append(a)
    return L

print(f(1))
print(f(2))
print(f(3))
# 默认值只计算一次。默认值为列表、字典或类实例等可变对象时，会产生与该规则不同的结果。例如，下面的函数会累积后续调用时传递的参数


# 不想在后续调用之间共享默认值时，应以如下方式编写函数
def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L
print(f(1))
print(f(2))
print(f(3))